CHI TIẾT BÀI VIẾT
Capture the Flag (CTF) | Phần 2. “Web” cho người mới bắt đầu chơi CTF
Phần 1. Cuộc thi CTF và hình thức thi CTF
Phần 2. "Web" cho người mới bắt đầu chơi CTF
Phần 3. Hướng dẫn Reverse Engineering (RE) cho người chơi CTF
-------------------------------------------------------------------------------------------
Tham gia cuộc thi ITSTAR SUPER CTF SERIES | 2022
-------------------------------------------------------------------------------------------
Là những câu hỏi mà bất cứ người chơi CTF nào lần đầu tham gia cũng đều hỏi. Mảng Web là một phần trong CTF khi tham gia nó đặt trước mắt bạn sẽ một website vậy bạn sẽ làm gì với nó? Để có thể tìm flag bạn phải khai thác được thông tin đề gợi ý gì, cho cái gì, trong web có gì,… Nhưng làm sao để có thể hiểu và khai thác được điều đó? Trước tiên chúng ta phải hiểu về Web.
Chúng ta hãy cùng nhau đi qua các vấn đề quan trọng mà người mới bắt đầu mảng web cần phải tìm hiểu.
1. Hiểu về giao thức truyền tải thông tin
- HTTP header: là các request gửi từ client lên sever thông qua giao thức HTTP. Các headers sẽ chứa đầy đủ các thông tin từ địa chỉ, nội dung,… Đặc biệt là cookie, user-gent là 2 trường được dùng nhiều nhất trong các bài thi ctf.
- Cách một HTTP request gửi đi với nhiều dạng khác nhau (GET, POST, PUT, DELETE, OPTIONS,…). Nên chú ý tìm hiểu kỹ về POST và GET. Một số trường hợp file .htaccess (.htaccess là gì?) sẽ block 2 method đó để chặn người dùng lấy kết quả (mẹo tại đây là chúng ta thay đổi phương thức request)
- Tìm hiểu về status code (404 Not Found, 302 Forbidden,…), hiểu tại sao response lại trả về cho mình như vậy vì mỗi số sẽ cho chúng ta một ý nghĩa khác nhau từ đó có thể khai thác nhiều hơn.
- Cách để thao tác với các headers đó các bạn có thể sử dụng Burp Suite rất tiện vì nó hổ trợ rất nhiều thứ từ ngôn ngữ lập trình đến kỹ thuật
Nguồn Internet
2. Hiểu về ngôn ngữ lập trình
- Ta cần ít nhất phải ở mức đọc hiểu được các ngôn ngữ HTML, CSS, JS và một số ngôn ngữ sever như PHP, JSP. Chúng ta cần phải hiểu ngôn ngữ đó để làm gì? Như HTML, CSS, JS là những ngôn ngữ mình đề xuất vì đó là kiểu ngôn ngữ từ client nên chúng ta có thể xem được source code gốc từ đó khai thác (vd: dev code vẫn để lại ghi chú đơn giản,…).
- Đối với PHP, ASP, JSP, v.v., đây là những ngôn ngữ phía máy chủ và không thể nhìn thấy code gốc, nhưng có rất nhiều bài báo CTF hoạt động mà người chơi có thể đọc để phân tích mã hoặc tìm lỗi từ đó chúng ta có thể đọc mã khai thác.
3. Hiểu về Cookie, Session
- Cookie: mã định danh từng lient dùng để lưu những thông tin tạm thời. Nhưng tập tin cookie sẽ được truyền từ server tới browser và được lưu trữ trên máy tính của bạn khi bạn truy cập vào ứng dụng
Nguồn Internet
- Session: vùng nhớ tạm chứa thông tin database trên RAM, được so sánh với cookie khi cần truy vấn nên sau 1 khoảng thời gian timeout ta thấy sẽ hết phiên session vì thấy người dùng này không còn tham gia nữa nên sẽ làm mới session.
Nguồn Internet
Trong CTF chúng ta sẽ gặp 1 số bài thông qua cookie từ đó thay đổi dữ liệu từ phía người dùng và truyền các dữ liệu giả mạo lên server nếu đọc cookie không phân biệt ipp, đặc điểm trình duyệt người dùng.
4. Hiểu về SQL Injection
- SQL Injection cơ bản được thực hiện bằng cách gửi lệnh SQL độc hại đến các máy chủ cơ sở dữ liệu thông qua các yêu cầu của người dùng mà website cho phép. Bất kỳ kênh input nào cũng có thể được sử dụng để gửi các lệnh độc hại, bao gồm các thẻ input, chuỗi truy vấn (query strings), cookie và tệp tin.
- SQL injection - Blind: Không thể trực tiếp get ra đoạn dữ liệu mình muốn và phải get từng ký tự, hoặc dựa và các câu lệnh điều kiện đúng sai,…
- SQL injection - Error based: Có thể nói là mở rộng của blind, tùy vào dữ liệu đúng hoặc sai mà server trả về kết quả khác nhau.
- SQL injection - Time based: Dùng một câu lệnh SQL chứa lệnh Sleep(), hoặc một hàm nào đó để nghỉ khi gặp điều kiện đúng. Ví dụ IF(điều kiện, điều kiện nếu đúng-> Sleep(10), đk nếu sai -> null)
Nguồn Internet
5. Hiểu về XSS
- XSS là kĩ thuật tấn công để chèn các script nguy hiểm vào source code ứng dụng web, mục đích thường là chiếm lấy phiên đăng nhập của người dùng.
Có 3 loại XSS chính:
- Reflected XSS: Script nguy hiểm được chèn trực tiếp vào response của user, hacker cần phải gửi link độc hại này cho user và lừa user nhấp vào link. Payload được thực hiện trong cùng một request và response nên còn được gọi là first-order XSS.
- Stored XSS: Hacker chèn script nguy hiểm vào trang web lỗi, script sẽ được lưu lại trong ứng dụng web. Bất cứ khi nào user truy cập vào trang web có chứa đoạn script đó, script sẽ được thực thi. Chính vì attack xảy ra qua 2 bước như vậy nên loại này còn được gọi là second-order XSS.
- DOM based XSS: Khá giống với Reflected XSS, tuy nhiên script của hacker sẽ không được nhúng trực tiếp vào ứng dụng web mà thông qua DOM (Document Object Model) và không giống như 2 loại XSS trên, mã độc sẽ được thực thi ngay khi xử lý phía client mà không thông qua server.
6. Local & Remote File Inclusion
Hàm ‘include’ được sử dụng để tránh việc lặp code bằng cách sao chép toàn bộ nội dung trong một file cụ thể một vào file khác chứa lời gọi include từ đó cho phép tin tặc truy cập trái phép vào những tập tin nhạy cảm trên máy chủ web hoặc thực thi các tệp tin độc hại bằng cách sử dụng chức năng "include”. Lỗ hổng này xảy ra do cơ chế kiểm tra đầu vào yếu thông qua 2 kiểu khai thác lỗ hổng:
- Lỗ hổng Remote file inclusion: cho phép include và thực thi trên máy chủ mục tiêu một tệp tin được lưu trữ từ xa. Có thể sử dụng RFI để chạy một mã độc trên cả máy của người dùng và phía máy chủ. Ảnh hưởng của kiểu tấn công này thay đổi từ đánh cắp tạm thời session token hoặc các dữ liệu của người dùng cho đến việc tải lên các webshell, mã độc nhằm đến xâm hại hoàn toàn hệ thống máy chủ.
Nguồn Internet
- Tấn công Local file inclusion: Lỗ hổng Local file inclusion nằm trong quá trình include file cục bộ có sẵn trên server. Lỗ hổng xảy ra khi đầu vào người dùng chứa đường dẫn đến file bắt buộc phải include. Khi đầu vào này không được kiểm tra, tin tặc có thể sử dụng những tên file mặc định và truy cập trái phép đến chúng, tin tặc cũng có thể lợi dụng các thông tin trả về trên để đọc được những tệp tin nhạy cảm trên các thư mục khác nhau bằng cách chèn các ký tự đặc biệt như "/”, "../”, "-".